package cn.biplam.common.wrapper.treeFlat.pcTree;

import java.util.List;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.KvMap;
import cn.biplam.common.wrapper.Result;
import cn.biplam.common.wrapper.treeFlat.PcNode;
import cn.biplam.common.wrapper.treeFlat.pcTree.callback.OperatorTypeCallback;

/**
 *  无业务级别父子关系转树形关系
 * @author XiaoRuxing Nov 21, 200910:12:34 AM
 * @version 1.0
 */
public class SimplePcTree implements PcTree{

	private PcTreeImp pcTree;
	
	public SimplePcTree(){
		this.pcTree = new PcTreeImp();
	}
	
	/**
	 *  创建父子关系转树形关系类
	 * @param treeData    父子关系数据集<BR>父子关系树的所有数据,包含ID,父ID,节点名称和业务级别(可选)     
	 * @param nodeIdField          记录ID字段名
	 * @param nodeParentIdField    父亲ID字段名
	 * @param nodeNameField        节点名称字段名
	 */
	public SimplePcTree(Result treeData,
			String nodeIdField,
			String nodeParentIdField,
			String nodeNameField){
		this.pcTree = new PcTreeImp(treeData,nodeIdField,
				nodeParentIdField,
				nodeNameField,
				null);
	}
	
	/**
	 *  设置节点操作类型回调器<BR>
	 *  节点操作类型回调器用于生成节点的操作类型
	 */
	public void setOperatorCallback(OperatorTypeCallback callback){
		this.pcTree.setOperatorCallback(callback);
	}
	
	/**
	 *  设置父子关系数据集
	 * @param treeData 父子关系数据集<BR>
	 *                 父子关系树的所有数据
	 */
	public void setPcData(Result treeData){
		this.pcTree.setPcData(treeData);
	}

	/**
	 *  设置父子关系数据集字段名称映射<BR>
	 *  记录ID,父亲ID,节点名称和业务级别对应的字段名称
	 * @param nodeId     记录ID字段名
	 * @param nodeParent 父亲ID字段名
	 * @param nodeName   节点名称字段名
	 */
	public void setFieldMap(String nodeId,
			String nodeParent,
			String nodeName){
		this.pcTree.setFieldMap(nodeId, nodeParent, nodeName, null);
	}
	
	/**
	 * 设置过滤数据列表 
	 * @param filterList 被过滤的节点列表(存储的内容为节点ID)
	 */
	public void setDataFilter(List<String> filterList){
		this.pcTree.setDataFilter(filterList);
	}
	
	/**
	 *  设置包含节点列表<BR>
	 *  列表中节点的所有子节点作为当前树的数据,即根节点为列表中的节点(节点数不应过多)<BR>
	 *  与节点过滤条件同时设置时,只能过滤当前节点列表的子节点<BR>
	 * @param includeList 被包含节点的列表
	 */
	public void setInclude(List<String> includeList){
		this.pcTree.setInclude(includeList);
	}
	
	/**
	 * @return 当前树数据
	 * @throws ErrorMessage
	 */
	public PcNode get() throws ErrorMessage {
		return this.pcTree.get();
	}

	public KvMap<String, String> getFieldMap() {
		// TODO Auto-generated method stub
		return null;
	}

}
